
#pragma once

#include <stdint.h>


namespace modpash {

    /**
     * @brief 为了能用一份AduHandler 代码处理多种Pdu 类型，需要一个基类做类型擦除
     *
     */
    class PduBase {
       public:
        using MarkType = uint32_t;

       private:
        MarkType _mark;

       public:
        // PduBase(MarkType mark) : _mark(mark) {}

        /**
         * @brief 获取标识
         *
         * 可以给Pdu 对象设置记号，AduHandler 接收到回调时，先判断记号，再决定要用什么处理方式。
         * 目的是让一份AduHandler 代码能够处理RTU，ASCII，TCP 或其他扩展协议，要处理不同协议Pdu 对象的差异，
         * 只需根据mark 选择不同的代码。
         *
         * 也可以用来标记某个Pdu 对象被关联到了哪一个通信端口，比如一个PduAscii 关联到Serial0，另一个则是Serial1，
         *
         *
         * @return MarkType
         */
        MarkType get_mark() const {
            return _mark;
        }

        void set_mark(MarkType m) {
            _mark = m;
        }
    };


}  // namespace modpash
